অ্যাপাচি HTTP ক্লায়েন্ট (Apache HTTP Client) এ Custom Connection Manager এবং Retry Mechanism ব্যবহারের মাধ্যমে আপনি HTTP কানেকশন ব্যবস্থাপনা কাস্টমাইজ করতে পারেন এবং রিট্রাই অপশন সংযুক্ত করতে পারেন। এই দুটি ফিচার আপনাকে HTTP ক্লায়েন্টের পারফরম্যান্স এবং স্থিতিশীলতা উন্নত করতে সহায়ক।
Custom Connection Manager ব্যবহার করে আপনি HTTP কানেকশনগুলি আরও বেশি কাস্টমাইজ এবং নিয়ন্ত্রণ করতে পারেন। অ্যাপাচি HTTP ক্লায়েন্টে, আপনি কাস্টম কানেকশন ম্যানেজার তৈরি করে বিভিন্ন সার্ভারের সাথে কানেকশন পুল ম্যানেজ করতে পারবেন। এটি কার্যকর হতে পারে যখন আপনি একাধিক সার্ভারের সাথে কানেকশন তৈরি করতে চান বা নির্দিষ্ট সার্ভারের জন্য আলাদা প্যারামিটার ব্যবহার করতে চান।
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.pool.PoolStats;
import org.apache.hc.client5.http.impl.pool.BasicHttpClientConnectionManager;
import org.apache.hc.core5.pool.PoolEntry;
public class CustomConnectionManagerExample {
public static void main(String[] args) throws Exception {
// Custom connection manager তৈরি করা
BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager();
// Connection pool-এর পরিসংখ্যান দেখতে পারেন
PoolStats poolStats = connectionManager.getTotalStats();
System.out.println("Total connections: " + poolStats.getAvailable() + " available connections");
// HTTP ক্লায়েন্ট তৈরি করা
try (CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connectionManager) // Custom connection manager সেট করা
.build()) {
// GET অনুরোধ তৈরি করা
HttpGet request = new HttpGet("https://example.com");
// HTTP অনুরোধ পাঠানো
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println("HTTP Response Status Code: " + response.getCode());
}
}
}
}
BasicHttpClientConnectionManager
: এটি একটি কানেকশন ম্যানেজার যা HTTP কানেকশন পুল ম্যানেজমেন্ট করে।PoolStats
: এই ক্লাসটি পুলে থাকা সক্রিয় এবং উপলব্ধ কানেকশনগুলির পরিসংখ্যান প্রদান করে।Retry Mechanism অ্যাপাচি HTTP ক্লায়েন্টে খুবই গুরুত্বপূর্ণ, বিশেষত যখন সার্ভারটি অস্থির থাকে অথবা সংযোগ সময়সীমা অতিবাহিত হয়ে যায়। আপনি কাস্টম রিট্রাই লজিক যোগ করতে পারেন, যেমন অনুরোধের ব্যর্থতার পর কিছু নির্দিষ্ট সংখ্যক রিটার্ন চেষ্টা করা।
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.DefaultHttpRequestRetryHandler;
import org.apache.hc.client5.http.impl.classic.HttpRequestRetryHandler;
import org.apache.hc.core5.http.ParseException;
import java.io.IOException;
public class RetryMechanismExample {
public static void main(String[] args) throws Exception {
// Custom Retry Handler তৈরি করা (3 বার retry করবে)
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(3, true);
// HTTP ক্লায়েন্ট তৈরি করা, যাতে retry mechanism সেট করা হয়
try (CloseableHttpClient httpClient = HttpClients.custom()
.setRetryHandler(retryHandler) // Retry handler যোগ করা
.build()) {
// GET অনুরোধ তৈরি করা
HttpGet request = new HttpGet("https://example.com");
// HTTP অনুরোধ পাঠানো এবং পুনঃচেষ্টা করা
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println("HTTP Response Status Code: " + response.getCode());
}
}
}
}
DefaultHttpRequestRetryHandler
: এটি একটি পূর্বনির্ধারিত রিট্রাই মেকানিজম, যা HTTP অনুরোধ ব্যর্থ হলে কিছু নির্দিষ্ট সংখ্যক রিটার্ন চেষ্টা করে। উপরের উদাহরণে, এটি ৩ বার চেষ্টা করবে।setRetryHandler(retryHandler)
: এটি ক্লায়েন্টে রিট্রাই মেকানিজম সেট করার জন্য ব্যবহৃত হয়।আপনি যদি একটি কাস্টম রিট্রাই লজিক তৈরি করতে চান, তবে আপনি নিজস্ব HttpRequestRetryHandler
ইমপ্লিমেন্ট করতে পারেন, যা নির্দিষ্ট শর্তের উপর ভিত্তি করে রিটার্ন চেষ্টা করবে।
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpRequestRetryHandler;
import org.apache.hc.core5.http.ParseException;
import java.io.IOException;
import org.apache.hc.client5.http.impl.classic.DefaultHttpRequestRetryHandler;
public class CustomRetryHandlerExample {
public static void main(String[] args) throws Exception {
// Custom retry handler ইমপ্লিমেন্ট করা
HttpRequestRetryHandler customRetryHandler = (exception, executionCount, context) -> {
if (executionCount > 3) { // ৩বারের বেশি retry না করবে
return false;
}
if (exception instanceof IOException) { // শুধু IOException এ retry হবে
return true;
}
return false;
};
// HTTP ক্লায়েন্ট তৈরি করা, যাতে custom retry handler সেট করা হয়
try (CloseableHttpClient httpClient = HttpClients.custom()
.setRetryHandler(customRetryHandler) // Custom retry handler যোগ করা
.build()) {
// GET অনুরোধ তৈরি করা
HttpGet request = new HttpGet("https://example.com");
// HTTP অনুরোধ পাঠানো এবং পুনঃচেষ্টা করা
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println("HTTP Response Status Code: " + response.getCode());
}
}
}
}
IOException
এর জন্য রিট্রাই করবে এবং সর্বোচ্চ ৩ বার রিট্রাই করবে।executionCount > 3
: এটা চেক করে যে, ৩ বার রিট্রাই করার পর আরও রিটার্ন চেষ্টা না করা হয়।এই দুটি ফিচার আপনাকে ক্লায়েন্টের পারফরম্যান্স এবং স্থিতিশীলতা উন্নত করতে সাহায্য করতে পারে, বিশেষত যখন সার্ভার অস্থির থাকে অথবা সংযোগের সমস্যা হয়।
common.read_more